#include "stm32f10x.h"// Device header

void delay_ms(u32 i);

int main()
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure_0;
	GPIO_InitStructure_0.GPIO_Mode=GPIO_Mode_Out_PP;
	GPIO_InitStructure_0.GPIO_Pin=GPIO_Pin_All;
	GPIO_InitStructure_0.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure_0);
	
	GPIO_InitTypeDef GPIO_InitStructure_1;
	GPIO_InitStructure_1.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_InitStructure_1.GPIO_Pin=GPIO_Pin_12;
	GPIO_InitStructure_1.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure_1);
	GPIO_Write(GPIOA,GPIO_Pin_All);
	uint16_t i=1;
	while(1)
	{
		if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12))
		{
			for(;i<=36;i=i*2)
			{
				GPIO_WriteBit(GPIOA,i,Bit_SET);
				delay_ms(100);
				GPIO_WriteBit(GPIOA,i,Bit_RESET);
				delay_ms(100);
				GPIO_WriteBit(GPIOA,i,Bit_SET);
				delay_ms(100);
				GPIO_WriteBit(GPIOA,i,Bit_RESET);
				delay_ms(100);
				GPIO_WriteBit(GPIOA,i,Bit_SET);
			}
			i=1;
		}
	}
}

void delay_ms(u32 i)
{
    u32 temp;
    SysTick->LOAD=9000*i;
    SysTick->CTRL=0X01;
    SysTick->VAL=0;
    do
    {
        temp=SysTick->CTRL;
    }
    while((temp&0x01)&&(!(temp&(1<<16))));
    SysTick->CTRL=0;
    SysTick->VAL=0;
}
